Introducción

Las riberas fluviales son ecosistemas muy importantes que acompañan a los arroyos y ríos en sus recorridos a lo largo de un territorio. Van cambiando sus características desde el inicio de la red fluvial (en las partes altas de una cuenca), hasta su desembocadura en un lago, o en el mar. Los cambios ribereños están ligados al gradiente de elevaciones de los sitios que atraviesan, y a características de las rocas, de la cubierta vegetal, y las variaciones climáticas, principalmente el régimen de precipitaciones (Naiman et al., 2005).

Dentro de los servicios ecosistémicos de estas zonas, se encuentran muchos relacionados con la regulación de la cantidad y calidad del agua, por lo que resultan ser sitios críticos para mantener la salud, la seguridad hídrica y la biodiversidad de los ecosistemas de agua dulce (Lowrance et al., 2000; Postel & Richter, 2003).

Una de las propiedades más importantes de las riberas fluviales es su heterogeneidad (Naiman et al., 2005), que tiene gran importancia para proveer hábitats diversos a lo largo de la red fluvial, en los cuales pueden vivir muchos organismos, y donde la entrada de luz a la columna de agua es variable, así como lo es la presencia de hojarasca, sedimentos, distintos tipos de rocas y de formas que tiene el terreno en cada tramo. Esta variedad es parte de lo que permite a las zonas ribereñas sostener una gran diversidad de especies y favorecer a aquellas que viven dentro de la columna de agua.

Además de ser una característica muy apreciada por los ecólogos y limnólogos, esta heterogeneidad también implica un gran reto para su manejo. ¿Cómo podemos cuidar la vegetación de la ribera, su dinámica hidrológica, al tiempo que se mantiene la producción de la tierra adyacente? ¿Cómo establecer criterios de manejo en zonas que pueden ser tan distintas? ¿Se maneja igual la ribera de los arroyos temporales que la de aquellos permanentes? ¿Tenemos las mismos criterios para manejar las riberas en las zonas altas de las cuencas, que en las zonas bajas?

Estas preguntas, que por lo general nos hacen concebir las posibles prácticas y acuerdos de manejo dentro de una cuenca, tienen respuestas que varían en función del contexto biofísico y social del territorio. La tipología que propone este capítulo es una forma de lidiar con la heterogeneidad ribereña favoreciendo prácticas acordes con las metas de manejo de una cuenca, como el cuidado de la biodiversidad y el suministro de agua para las personas y para los ecosistemas. Esta metodología, publicada en Flores-Díaz et al. (2017), reconoce la unicidad de los tramos fluviales y la importancia de diseñar prácticas in situ, a partir de una jerarquía organizada en tres niveles: contexto, estructura y microestructura.

Objetivo

Construir una tipología de riberas que permita sintetizar la heterogeneidad del sistema fluvial, a partir de variables biofísicas de la cuenca y de los arroyos de la red hídrica, mediante un procedimiento jerárquico.

Procedimiento

Consideraciones generales

Encontrarás una gran variedad de recursos digitales de la cuenca que te interesa, por lo que te recomendamos que ubiques claramente las fuentes de información, metadatos y los procedimientos de validación que los sustentan.

La información que se va sintetizando a lo largo de el procedimiento que presentamos aquí, está referida a cada uno de los segmentos fluviales que conforman la red hidrológica. Un segmento o tramo fluvial es aquel que se encuentra entre dos nodos de la red (Figura 1).


Figura1 Figura 1. Imagen del segmento fluvial (ejemplos en amarillo), que considera los tramos comprendidos entre dos afluentes.



Las variables utilizadas nos indican diferentes procesos importantes para el manejo ribereño (Tabla1):

Altitud (msnm): Esta variable está relacionada con el clima y con los rasgos generales de la cuenca asociados a su ubicación.

Geoforma: Influye en el tiempo de residencia del agua a través de la cuenca. Provee sustrato para procesos hidrológicos, que influyen en la estructura de las riberas y en la calidad del agua. Las geoformas se definen local o regionalmente, para que representen procesos que están ocurriendo a estas escalas.

Coeficiente de Escurrimiento: Cociente escurrimiento / precipitación. Permite reconocer de forma general la proporción de la precipitación que escurre en los canales de la red hidrográfica. Relacionado con la ubicación del segmento de río dentro de la cuenca, y con la conducción de agua en el canal.

Pendiente longitudinal (°): Relacionada con el tiempo de residencia del agua y el poder del río.

Orden hidrológico: Relacionado con la capacidad de conducción de agua, la velocidad del flujo, y el contacto entre la ribera y el canal. Utilizamos el procedimiento de (1957).

Temporalidad: Presencia de agua en el arroyo. Relacionado con la carga de materiales (sedimentos, organismos, semillas, etc.), y a los procesos biogeoquímicos relacionados con la calidad del agua.

Longitud del segmento (m): Relacionado con el contacto entre la ribera y el canal.

Pendiente lateral (°): Determinante para la relación entre las porciones laterales y el canal del arroyo.

Ancho del banco (m): Extensión del canal “lleno” antes de la inundación de la ribera. Relacionado con la conectividad lateral, y con el intercambio de materiales entre el canal y la ribera.

Cociente longitud / ancho: Expresa la longitud del contacto entre la porción terrestre y el agua.


Tabla 1. Variables y fuentes de información

Nivel Variable y fuente Fuente
Contexto Altitud (msnm) Modelos de Elevaciones de INEGI, https://www.inegi.org.mx/app/geo2/elevacionesmex/
Geoforma (montañas, colinas, planicies) Modelos de Elevaciones de INEGI, https://www.inegi.org.mx/app/geo2/elevacionesmex/
Coeficiente de escurrimiento (adimensional). Modelos de Elevaciones de INEGI, https://www.inegi.org.mx/app/geo2/elevacionesmex/
Estructura Pendiente longitudinal (°) Conjuntos vectoriales de INEGI, https://www.inegi.org.mx/temas/hidrografia/#Descargas
Orden hidrológico (Strahler 1957) Conjuntos vectoriales de INEGI, https://www.inegi.org.mx/temas/hidrografia/#Descargas
Temporalidad (permanente, intermitente) Conjuntos vectoriales de INEGI, https://www.inegi.org.mx/temas/hidrografia/#Descargas
Microestructura Pendiente lateral (°) Cálculo a partir del MDE
Ancho del banco (m) Mediciones de campo
Cociente longitud / ancho (adimensional) Cálculo a partir de mediciones de campo


El procedimiento que seguimos es jerárquico, donde el contexto es el nivel más amplio y establece las condiciones en las que se presentan el resto de los niveles, que son estructura y microestructura.

Preprocesamiento

Es necesario cargar los siguientes paquetes dentro de tu sesión de R.

library(terra)
library(raster)
library(tidyverse)
library(GGally)
library(Rsagacmd)
library(rpart)
library(rpart.plot)
library(sf)
library(devtools)
library(treeClust)


r_dem <- "datos/DEM_BASE.tif" 
r_cuenca  <- "datos/cuenca_calnali.shp"
r_redhidrologia <- "datos/red_h.shp"
r_coes <-  "datos/ce.shp"


El paquete terra permite la manipulación de manera ágil del modelo digital de elevación.

MDE <- rast(r_dem)
MDE
## class       : SpatRaster 
## dimensions  : 678, 1913, 1  (nrow, ncol, nlyr)
## resolution  : 15, 15  (x, y)
## extent      : 534663.3, 563358.3, 2306431, 2316601  (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 
## source      : DEM_BASE.tif 
## name        : DEM_BASE


Al comparar la extensión del límite de la cuenca se hace evidente la necesidad de recortar el modelo digital elevación.

cuenca  <- vect(r_cuenca) 
plot(MDE)
plot(cuenca, add = TRUE)

MDE_cuenca <- crop(MDE, cuenca) %>% mask(cuenca)
plot(MDE_cuenca)


Para el cálculo de las geoformas se seguirá la metodología propuesta por Weiss (2001), la cual se encuentra desarrollada como un módulo del software SAGA (Conrad et al., 2015). Con la finalidad de aprovechar esto, conectamos R con SAGA.

saga <- saga_gis(opt_lib = c("grid_calculus", "ta_morphometry"), cores = 8)

#print(saga$ta_morphometry$tpi_based_landform_classification)
geof_r <- MDE %>%
  saga$ta_morphometry$
  tpi_based_landform_classification(radius_a_min = 0,
                                   radius_a_max = 100,
                                   radius_b_min = 0,
                                   radius_b_max = 1000) 


Cargamos las geoformas desde el archivo que generó SAGA, visualizándolas con distintos colores y etiquetas.

c_geoformas <- c(
  'Canales',
  'Drenajes de pendiente media',
  'Drenajes zonas altas',
  'Valles',
  'Planicies',
  'Pendientes abiertas',
  'Pendientes de altura',
  'Crestas locales',
  'Crestas de media ladera',
  'Cimas')

col <- c(
  '#7F0000',#1
  '#FFC8C8',#2
  '#FFC800',#3
  '#FF7F7F',#4
  '#80FFFF',#5
  '#00FF80',#6
  '#00FF00',#7
  '#7FC8FF',#8
  '#007FFF',#9
  '#0000FF',
  'black'
) 

geof_r <- ratify(geof_r)
rat <- levels(geof_r)[[1]]
rat$clases <- c_geoformas
levels(geof_r) <- rat

rasterVis::levelplot(geof_r, att='clases', col.regions=col)

geoformas  <- rast(geof_r) %>% 
  crop( ., MDE_cuenca)

names(geoformas) <- "geoformas"


Esta es una clasificación morfométrica que utiliza las diferencias de elevaciones registradas en el modelo digital (2001). Usualmente esta clasificación se realiza en dos escalas, de modo que es posible ver ambos grupos de geoformas, aquellas dominantes en una región amplia (un estado de la República o una región fisiográfica) y en una más acotada (p. ej. un municipio).


A continuación, calculamos la pendiente del terreno en grados considerando NUEVE celdas concéntricas, es decir a partir de una celda central y ocho vecinas.

pendiente <- terrain(MDE_cuenca, v = "slope", neighbors=8, unit="degrees")
pendiente 
## class       : SpatRaster 
## dimensions  : 611, 1847, 1  (nrow, ncol, nlyr)
## resolution  : 15, 15  (x, y)
## extent      : 535158.3, 562863.3, 2306926, 2316091  (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 
## source      : memory 
## name        :    slope 
## min value   :        0 
## max value   : 66.80908


Cargamos el conjunto de datos vectoriales que contiene la red hídrica.

red <- vect(r_redhidrologia)
red
##  class       : SpatVector 
##  geometry    : lines 
##  dimensions  : 313, 20  (geometries, attributes)
##  extent      : 535235, 562832.6, 2307039, 2315588  (xmin, xmax, ymin, ymax)
##  coord. ref. : +proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 
##  names       :        ID CVE_SUBC CLAVE50K  TIPO           ENTIDAD    FC
##  type        :     <num>    <chr>    <chr> <num>             <chr> <num>
##  values      : 8.304e+06   RH26Dx   f14d52   101 CORRIENTE DE AGUA  3271
##                8.304e+06   RH26Dx   f14d52   101 CORRIENTE DE AGUA  3272
##                8.304e+06   RH26Dx   f14d52   101 CORRIENTE DE AGUA  3271
##     CONDICION EDICION      FECHA LENGTHM (and 10 more)
##         <chr>   <chr>      <chr>   <num>              
##  INTERMITENTE       O 1998/11/30   114.5              
##       PERENNE       O 1998/11/30   76.65              
##  INTERMITENTE       O 1998/11/30   859.8


Trabajado con la red hídrica y el modelo digital de elevaciones, extraemos la elevación promedio de cada tramo fluvial, que es una porción de la red comprendido entre dos afluentes (ver Figura 1). En los siguientes pasos extraemos la pendiente media de cada tramo y la geoforma dominante que atraviesa.

elevacion_media  <- terra::extract(MDE_cuenca, red, fun = mean)
head(elevacion_media)
##   ID  DEM_BASE
## 1  1  976.5455
## 2  2  920.3750
## 3  3  652.1316
## 4  4 1140.5875
## 5  5 1208.9936
## 6  6  940.0000
red$elevacion <- elevacion_media$DEM_BASE
pendiente_media  <- terra::extract(pendiente, red, fun = mean)
red$pendiente_lg <- pendiente_media$slope
mayoria <- function(x) {
  gx <- unique(x)
  gx[which.max(tabulate(match(x, gx)))]
}

red_geoforma <- terra::extract(geoformas, red, fun = mayoria)
red$geoforma <- red_geoforma$geoformas  %>% as.factor()


Graficamos el coeficiente de escurrimiento usando la librería ggplot2. Esta información es presentada de manera categórica. La leyenda de la gráfica indica los valores de CE por categoría en la cuenca y la ubicación de cada zona.

coes <- st_read(r_coes)
## Reading layer `ce' from data source 
##   `/home/alequech/Documents/personal/capitulo_cuencas/datos/ce.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 11 features and 7 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: 535164.1 ymin: 2306932 xmax: 562861.4 ymax: 2316097
## Projected CRS: Mexico ITRF2008 / UTM zone 14N
ggplot(coes)+
  geom_sf(aes(fill = DESCRIPCIO))


Realizamos un cambio de formato para pasar de la clase SpatVector a un objeto sf. Esto permite realizar operaciones entre la red fluvial y el coeficiente de escurrimiento.

class(red)
## [1] "SpatVector"
## attr(,"package")
## [1] "terra"
red <- st_as_sf(red)
class(red)
## [1] "sf"         "data.frame"


Asignamos un valor de coeficiente de escurrimiento a cada tramo fluvial y graficamos.


Primer nivel jerárquico - El Contexto

El contexto de la cuenca indica las características de los sitios que son atravesados por los ríos y sus riberas, y establece una serie de rasgos importantes para la dinámica hidrológica, como el régimen de lluvias, la posición en la cuenca, etc. En este nivel hemos considerado la elevación, las geoformas como variables independientes, y el coeficiente de escurrimiento como variable dependiente. Estas variables son analizadas mediante un árbol de clasificación que permite obtener reglas de agrupamiento para cada contexto resultante.


Coeficiente de escurrimiento, elevación y geoformas

Los números de la tabla son conteos de los segmentos fluviales que están en cada categoría de CE. Vemos que la mayor parte de los segmentos están en regiones con 20-30% de CE, seguidos de las zonas con CE mayor a 30%. El CE es un cálculo muy local, e indica la proporción de la lluvia que está disponible para escurrir en esa zona de la cuenca y no refleja los flujos que llegan desde la parte alta.

table(red$geoforma, red$ce)
##    
##     +30% 10-20% 20-30% 5-10%
##   1   18      0     29     2
##   2    6      7     31     5
##   4    3      1     28     1
##   5   21      9     42     4
##   6   29      6     56    10
##   7    0      1      4     0


red %>% 
  st_drop_geometry() %>%
  select(geoforma,elevacion, ce) %>%
   ggpairs(aes(colour = ce, alpha = 0.4))
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.


arbol_contexto <- rpart(ce ~ elevacion + geoforma, data = red, cp = .03) 

paleta <- list("lightpink", "lightblue", "lightgray")

rpart.plot(arbol_contexto ,extra = 0, branch.lty = 3, box.palette =  paleta)


La función ´´rpart´´ nos permite explorar la complejidad del árbol de clasificación por medio del parámetro ´´cp´´. Si este valor es muy pequeño, se incrementa la cantidad de ramas (subdivisiones) del árbol y por tanto, su complejidad. En el caso de la cuenca que nos ocupa, nos interesa mirar los grandes contextos en la cuenca, por lo es suficiente tener categorías gruesas. Nota que no han sido incluidas las regiones entre 5 y 10% de CE, por el reducido número de segmentos fluviales que caen en esa categoría.

Una interpretación general nos permite distinguir que la elevación es el tronco principal del árbol, a partir del cual se separan dos grandes ramas (leyendo el árbol de izquierda a derecha): regiones con CE de 20 y 30% en elevaciones menores a 545 msnm, y zonas con elevaciones mayores o iguales a 545 msnm.

Esta última zona se subdivide con una regla que separa elevaciones menores a 1008 msnm, que en caso de no cumplirse, nos indica una siguiente regla que divide a las zonas mayores o iguales a 1327 msnm, dividiendo regiones con CE entre 20 y 30%, y en elevaciones mayores o iguales a 1327 msnm el CE se reduce a 10-20%. Esto ya nos da una idea de que las zonas más elevadas no parecen coincidir con aquellas donde hay mayor cantidad de agua para escurrimiento superficial.

Las zonas menores a 1008 msnm se subdividen en función de dos geoformas, los canales y las pendientes abiertas (laderas). En caso de ser falsa (cuando se trata de otras geoformas) el CE es 20-30%, y en caso de ser verdadera el CE es mayor al 30%, que es la cifra más elevada registrada para esta cuenca.


La construcción del segundo árbol de clasificación nos permitirá proponer grupos de contexto-estructura de riberas de forma más sintética.


Segundo nivel jerárquico - La estructura

Una vez caracterizados los contextos que ríos y arroyos atraviesan en la cuenca, analizamos la estructura de las riberas. Este procedimiento utiliza la información sobre el orden hidrológico, la temporalidad del agua, la longitud y la pendiente longitudinal de cada tramo fluvial. Estas características nos permiten comprender para cada tramo, cómo se ha moldeado la relación entre la dinámica hidrológica y geomorfológica, es decir, entre el caudal y la carga de agua y materiales como sedimentos, semillas, organismos, etc.

La siguiente gráfica nos permiten ver las características de los ríos en función del orden hidrológico, su distribución altitudinal y las pendientes longitudinales del canal. Estos rasgos están asociados al poder del río, es decir, cuánta agua es capaz de conducir y la fuerza que puede alcanzar en función de la pendiente del canal (Ferguson, 2012).


red$ORDER_1 <- as.factor(red$ORDER_1)
red %>% 
  st_drop_geometry() %>%
  select(geoforma,elevacion, ORDER_1, pendiente_lg) %>%
   ggpairs(aes(colour = ORDER_1, alpha = 0.4))


Utilizando un segundo árbol de clasificación, revisamos el peso de las variables de estructura de tramos fluviales. En el nivel anterior caracterizamos los contextos y en este, los tramos.

red$ORDER_1 <- as.ordered(red$ORDER_1)

arbol_estructura <- rpart(ce ~ ORDER_1 + CONDICION + pendiente_lg + LENGTHM , data = red, cp = 0.014)

rpart.plot(arbol_estructura ,extra = 0, branch.lty = 3, box.palette =  paleta)

En el árbol del nivel estructura la variable más importante para construir las reglas de decisión es la longitud de los arroyos. Al inicio (leyendo el árbol de derecha a izquierda) tenemos la separación en ríos menores a 629 m, que tienen un CE de 20 a 30%. Se separan después los arroyos y ríos con pendiente longitudinal mayor a 17 y a 13 grados, ambos grupos están en la misma categoría de CE que el anterior.

A su vez, los arroyos con pendiente longitudnal mayor a 13 y menor a 6.4 grados, se dividen en dos grupos: aquellos con pendiente longitudinal mayor a dos grados con CE entre 20 y 30%, y con pendiente menor a dos grados que presentan CE mayor a 30%.

Por último, los arroyos con pendiente mayor o igual a 6.4 grados con una longitud mayor a 1527 m presentan CE entre 20 y 30%, y aquellos menores a esa longitud pero mayores al primer corte de tamaño (629 m), presentan mayor CE a 30%.

Estas subdivisiones nos van indicando el comportamiento en función de la longitud del cauce y de las pendientes de los tramos fluviales. Los tramos cortos mantienen CE entre 20 y 30% y los más largos tienden a estar en zonas de mayor CE.


Grupos contexto - estructura

Con los diagramas y árboles, podemos proponer un primer agrupamiento que describa el contexto - esrtructura de los ríos y riberas de la cuenca, considerando las variables indicadas como importantes. Recordemos que el contexto es el nivel más amplio y establece restricciones a los niveles inferiores, por lo cual comenzaremos con los grupos de contexto y dentro de cada uno de ellos describiremos los rasgos de esrtructura de los ríos y riberas.

Proyectamos los resultados del árbol en el mapa de la red fluvial, de modo que veamos espacialmente su distribución.


red %>%
  st_drop_geometry() %>%
  select(geoforma,elevacion, ce) -> a
arbol <- treeClust::rpart.predict.leaves(arbol_contexto, a , type = "where")

red$contexto <- as.factor(arbol)
 
plot(red["contexto"])


El mapa expresa tres contextos generales en la cuenca: la zona alta o de cabecera indicada con los números de clases 7 y 8, la zona media indicada con los números 4 y 5, y la zona baja con la clase 9.


Hacemos lo mismo en el caso del árbol de clasificación de la estructura.

red %>%
  st_drop_geometry() %>%
  select(ce, ORDER_1, CONDICION, pendiente_lg, LENGTHM) -> b
arbol_est <- treeClust::rpart.predict.leaves(arbol_estructura, b , type = "where")
red$estructura <- as.factor(arbol_est)
plot(red["estructura"])


La representación espacial de los grupos propuestos por los árboles nos permiten hcer algunas observaciones. En el árbol de contexto vemos claramente tres zonas que siguen un gradiente altitudinal, mientra el árbol de estructura muestra una diversidad mucho mayor de rasgos de los tramos fluviales. Por ejemplo, los arroyos de orden bajo se distribuyen por toda la cuenca, y no únicamente en las zonas altas. Sin embargo, los arroyos de orden bajo (1 a 3) pueden tener comportamientos distintos en función del coeficiente de escurrimiento de la zona donde se encuentran.

Hemos seguido una metodología jerárquica, por lo que la interpretación se realiza dentro de cada contexto, que es donde tiene sentido describir los tramos fluviales por la influencia que aquellos tienen en estos últimos. Para la interpretación de estos resultados, podemos ayudarnos con algunas preguntas guía, como las siguientes:

a) ¿Cuál es el contexto con el mayor coeficiente de escurrimiento?

b) ¿Cómo son los arroyos que están ubicados en la zona de mayor coeficiente de escurrimiento?

c) ¿Qué criterios pueden ser de utilidad para guiar el manejo ribereño en cada uno de los contextos?

d) ¿De qué manera se podrían clasificar los arroyos de mayor pendiente longitudinal y orden, dentro de contextos de alto escurrimiento?


Conclusiones

Esta rutina jerárquica busca generar criterios para contar con buenas prácticas de manejo ribereño. La caracterización de las zonas en la cuenca facilita considerar su heterogeneidad, permite hacer visibles las variables que pueden definir un buen manejo o los riesgos de tomar decisiones que tienen consecuencias sobre la integridad de los ecosistemas de agua dulce y sobre la calidad del agua superficial a lo largo de la cuenca.

Este ejercicio busca ser repetible y proporcionar un punto de partida para la descripción de los hábitats fluviales en cualquier cuenca hidrográfica.



Conrad, O., Bechtel, B., Bock, M., Dietrich, H., Fischer, E., Gerlitz, L., Wehberg, J., Wichmann, V., & Böhner, J. (2015). System for automated geoscientific analyses (SAGA) v. 2.1.4. Geoscientific Model Development, 8(7), 1991–2007. https://doi.org/10.5194/gmd-8-1991-2015
Ferguson, R. I. (2012). River channel slope, flow resistance, and gravel entrainment thresholds. Water Resources Research, 48(5).
Flores-Dı́az, A. C., Guevara Hernández, R., Mendoza, M. E., Langrave, R., Quevedo, A., & Maass, M. (2017). Hierarchical procedure for creating local typologies for riparian zone research and management based on biophysical features. Physical Geography, 39(2), 118–139.
Lowrance, R., Altier, L., Williams, R., Inamdar, S., Sheridan, J., Bosch, D., Hubbard, R., & Thomas, D. (2000). REMM: The riparian ecosystem management model. Journal of Soil and Water Conservation, 55(1), 27–34.
Naiman, R. J., Decamps, H., & McClain, M. E. (2005). Riparia: Ecology, conservation, and management of streamside communities. Elsevier.
Postel, S., & Richter, B. (2003). Rivers for life: Managing water for people and nature. Island press.
Strahler, A. N. (1957). Quantitative analysis of watershed geomorphology. Eos, Transactions American Geophysical Union, 38(6), 913–920.
Weiss, A. (2001). Topographic position and landforms analysis. Poster Presentation, ESRI User Conference, San Diego, CA, 200.